#include<cstdio>
#include<string>
#include<vector>
#include<algorithm>
#include<bitset>
#include<iostream>
#include<stack>
#include<math.h>
using namespace std;

class Var{
public:
	string name;
	int len;
	vector<int> element;
	
	Var(string n,int l){
		this->len = l;
		this->name = n;
		for(int i=0;i<this->len;++i){
			this->element.push_back(-1);
		}
	}
	
	bool OutOfRange(int k){
		return k<0 || k>=len;
	}
};
// 一个数组只会申明一次 
// 用于存储所有的变量集合 
vector<Var> Arr; 


// bug类型 
// case 1 : 数组下标出界
// case 2 : 使用一个未初始化的变量 
int FindVar(string name){
	int ix=0;
	while(ix < Arr.size()){
		if(Arr[ix].name == name){
			return ix;
		}
		ix++;
	}	
	return -1;
}



// 声明的时候用 
void GetNameAndLen(string op,int begin,int end,string& name,int &len){
	int ix = begin;
	while(ix<end && op[ix] != '['){
		if(op[ix] != ' '){
			name += op[ix];
		}
		ix++;
	}
	cout<<"name in fun is "<<name<<" and ix is "<<ix<<endl; 
	
	ix++;
	while(ix<end && op[ix] != ']'){
		if(op[ix] != ' '){
			len = len*10 + op[ix]-'0';
		}
		ix++;
	}	
}


int GetValue(string op,int begin,int end,stack<string>& spname){
	int ix = begin;
	string name;
	int val = 0;
	// 首先去除前置空格 
	while(ix<end && op[ix]==' '){
		ix++;
	}
	
	if(op[ix] >='0' && op[ix] <= '9'){
		// 这时已经是 数字类型 1..9 
		while(ix<end && op[ix]!=' ' && op[ix]>='0' && op[ix]<='9'){
			if(op[ix] != ' '){
				val = val*10 + op[ix]-'0';
			}
			ix++;
		} 
	} else {
		// 现在是数组变量取值
		while(ix < end && op[ix] !='['){
			if(op[ix] != ' '){
				name += op[ix];
			}
			ix++;
		}
		spname.push(name);
		ix++;
	 	val = GetValue(op,ix,end,spname);
	}
	return val;
} 


int  main(){
	string op;
	int line = 0;
	while(getline(cin,op)){
		if(op[0]=='.'){
		 	Arr.clear();
		 	getline(cin,op);
			if(op[0]=='.'){
				break;
			}
		 	continue;
		} 
		
		if(op.size()==0){
			continue;
		}
		
		line++;
		int equ_ix = op.find('=');
        bool flag = true;
		if(equ_ix == -1){
			// 没有出现等号，则可以认为是声明
			string name;
			int len=0;
			GetNameAndLen(op,0,op.size(),name,len);
			Var var = Var(name,len);
			Arr.push_back(var); 
			cout<<" name is "<<name<<" and len is "<<len<<endl;
		}
		else {
			// 赋值操作
			// 分为等号前和等号后，=的index是eqi_ix
			stack<string> spname;
			int val;
			// 首先处理等号右边 
			val = GetValue(op,equ_ix+1,op.size(),spname);

            // 
            // cout<<"val of right is "<<val<<" and spname.size = "<<spname.size();
            // continue;

			string cur;
			int ix;
			while(! spname.empty() ){
				cur = spname.top();
				ix = FindVar(cur);
				if(ix == -1){
					// 未声明变量
					cout<<line<<endl;
                    flag = false;
					break; 
				} else {
					if (val < 0 || val >= Arr[ix].len){
						// 下标越界 
						cout<<line<<endl;
                        flag = false;
						break;
					}
					val = Arr[ix].element[val];
					if(val == -1){
						// 未声明的变量 
				 		cout<<line<<endl;
                        flag = false;
						break; 
					}
				}
				spname.pop();
			} 
            if(flag == false){
                continue;
            }
            while(!spname.empty()){
                spname.pop();
            }

			int equ_right = val;

			// 等号左边 
			val = GetValue(op,0,equ_ix,spname);
			// 此时应该留一个最后一个是赋值操作 
			while(spname.size()>1 ){
				cur = spname.top();
				ix = FindVar(cur);
				if(ix == -1){
					// 未声明变量
					cout<<line<<endl;
                    flag = false;
					break; 
				} else {
					if (val < 0 || val >= Arr[ix].len){
						// 下标越界 
						cout<<line<<endl;
                        flag = false;
						break;
					}
					val = Arr[ix].element[val];
					if(val == -1){
						// 未声明的变量 
				 		cout<<line<<endl;
                         flag = false;
						break; 
					}
				}
				spname.pop();
			} 
            if(flag == false){
                continue;
            }

			cur = spname.top();
			ix = FindVar(cur);
			if(ix == -1){
				cout<<line<<endl;
			} else {
				if (val < 0 || val >= Arr[ix].len){
					cout<<line;
				}
				Arr[ix].element[val] = equ_right;
			}
			
			
//			cout<<"equ_ix is "<<equ_ix<<endl;
//			while(!spname.empty()){
//				cout<<spname.top()<<endl;
//				spname.pop();
//			}
			// cout<<"last val is "<<val << endl ;
//			
		}
	}	
	
	return 0;
} 